package cn.itsource.util;

import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.util.IdUtil;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author : 张金铭
 * @description :
 * @create :2022-11-01 15:01:00
 */
public class UpdateUtils {

    public static String fileUpload(MultipartFile file) {
        // 填写Object完整路径，完整路径中不能包含Bucket名称，例如exampledir/exampleobject.txt。
        //获取原始的文件名
        String oldName = file.getOriginalFilename();

        //获取文件后缀
        String suffix = FileNameUtil.getSuffix(oldName);

        //使用工具类随机生成文件名
        String uuid = IdUtil.fastUUID();

        //拼成一个新文件名
        String newName = uuid + "." + suffix;


        String objectName = "exampledir/" + newName;
        // 填写本地文件的完整路径，例如D:\\localpath\\examplefile.txt。
        // 如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件流。

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(Constants.END_POINT_URL, Constants.ACCESS_KEY_ID, Constants.ACCESS_KEY_SECRET);

        try {
            // 创建PutObject请求。
            ossClient.putObject(Constants.BUCKET_NAME, objectName, file.getInputStream());
            return "https://" + Constants.BUCKET_NAME + "." + Constants.END_POINT + "/" + objectName;
        } catch (Exception oe) {
            oe.printStackTrace();
            return null;
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }


    public static boolean fileDelete(String fileName) {
        // 填写Object完整路径，完整路径中不能包含Bucket名称，例如exampledir/exampleobject.txt。
        //获取原始的文件名

        String objectName = Constants.DIR_NAME + fileName;
        // 填写本地文件的完整路径，例如D:\\localpath\\examplefile.txt。
        // 如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件流。

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(Constants.END_POINT_URL, Constants.ACCESS_KEY_ID, Constants.ACCESS_KEY_SECRET);

        try {
            // 创建PutObject请求。
            ossClient.deleteObject(Constants.BUCKET_NAME, objectName);
            return true;
        } catch (Exception oe) {
            oe.printStackTrace();
            return false;
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

}
